home *** CD-ROM | disk | FTP | other *** search
/ SPACE 2 / SPACE - Library 2 - Volume 1.iso / program / 519 / aes_vdi.s < prev    next >
Text File  |  1991-02-24  |  14KB  |  369 lines

  1. ;************************************************************************
  2. ;* Σ-soft-AES/VDI-Binding                                               *
  3. ;* ©1989 by Σ-soft, written by Markus Fritze           05.12.1989 14:40 *
  4. ;************************************************************************
  5.                 TEXT
  6. gem_init:       movea.l 4(SP),A6        ;Basepageadresse holen
  7.                 movea.w #$0100+$0400,A5 ;Größe der Basepage + Stackgröße (1k)
  8.                 adda.l  12(A6),A5       ;+ Größe des TEXT-Segments
  9.                 adda.l  20(A6),A5       ;+ Größe des DATA-Segments
  10.                 adda.l  28(A6),A5       ;+ Größe des BSS-Segments
  11.                 move.l  A5,D1           ;= Gesamtlänge des Programms
  12.                 andi.w  #$FFFE,D1       ;Länge nun gerade
  13.                 add.l   A6,D1           ;+ Programmstart (Basepageadresse)
  14.                 movea.l D1,SP           ;Stack endet dort
  15.                 move.l  A5,-(SP)        ;Programmlänge
  16.                 move.l  A6,-(SP)        ;Adresse der Basepage
  17.                 move.l  #$4A0000,-(SP)  ;Funktionsnummer + Dummyword (0)
  18.                 trap    #1              ;Mshrink(0,Basepageadr,Prglänge)
  19.                 lea     12(SP),SP       ;Nur noch den Stack korrigieren
  20. ;Das war schon alles. In A6 befindet sich noch die Basepageadresse und in a5
  21. ;liegt die totale Programmlänge (TRAP #1 zerstört D0-D2 und A0-A2!)
  22.  
  23.                 move.l  #appl_init,D0
  24.                 bsr     aes             ;Programm als GEM-Applikation anmelden
  25.                 move.w  D0,gl_apid
  26.  
  27.                 move.l  #graf_handle,D0
  28.                 bsr     aes             ;Handle der Bildschirm-Workstation ermitteln
  29.                 move.w  D0,gr_handle
  30.  
  31.                 lea     intin(PC),A4    ;VDI-Intin-Array (war früher falsch!)
  32.                 moveq   #10,D0
  33. gem_in1:        move.w  #1,(A4)+
  34.                 dbra    D0,gem_in1
  35.                 addq.w  #1,-(A4)
  36.                 moveq   #100,D0
  37.                 moveq   #$0B,D1
  38.                 lsl.w   #8,D1
  39.                 bsr     vdi             ;v_opnvwk() - Workstation öffnen
  40.                 move.w  int_in+10(PC),gr_handle ;VDI-Handle neu merken
  41.  
  42. ;************************************************************************
  43. ;* Ab hier liegt das eigene Programm                                    *
  44. ;************************************************************************
  45.  
  46.  
  47. ;************************************************************************
  48. ;* Programm beenden                                                     *
  49. ;************************************************************************
  50. gem_exit:       moveq   #101,D0
  51.                 moveq   #0,D1
  52.                 bsr.s   vdi             ;v_clsvwk() - Workstation schliessen
  53.  
  54.                 move.l  #appl_exit,D0
  55.                 bsr.s   aes             ;Applikation wieder abmelden
  56.  
  57.                 clr.w   -(SP)
  58.                 trap    #1              ;und verlassen mit Pterm0()
  59.  
  60. ;************************************************************************
  61. ;* Mein eigener kleiner AES-Aufruf                                      *
  62. ;* D0=Die ersten 4 Einträge im contrl-Array (Bytebreite!)               *
  63. ;*    Bit 24-31 = Der Opcode bzw. die Funktionsnummer                   *
  64. ;*    Bit 16-23 = Anzahl der Einträge in int_in                         *
  65. ;*    Bit 8-15  = Anzahl der Einträge in int_out                        *
  66. ;*    Bit 0-7   = Anzahl der Einträge in addr_in                        *
  67. ;* Die Anzahl der Einträge in addr_out ist stets 0.                     *
  68. ;* Ausnahme:Bei rsrc_gaddr() dort sollte dort eine 1 stehen (Atari hält *
  69. ;*          sich allersdings selbst nicht dran)                         *
  70. ;************************************************************************
  71. aes:            movem.l D1-A6,-(SP)     ;besser retten, man kann nie wissen
  72.                 lea     control(PC),A0
  73.                 clr.l   (A0)
  74.                 clr.l   4(A0)           ;contrl-Array löschen
  75.                 movep.l D0,1(A0)        ;und die neuen Daten eintragen
  76.                 lea     aes_pb(PC),A0
  77.                 move.l  A0,D1
  78.                 move.w  #$C8,D0
  79.                 trap    #2              ;AES aufrufen
  80.                 moveq   #0,D0
  81.                 move.w  int_out(PC),D0
  82.                 movem.l (SP)+,D1-A6
  83.                 rts
  84.  
  85. ;************************************************************************
  86. ;* Und das gleiche nochmal für die VDI-Funktionen                       *
  87. ;* D0 = Opcode bzw. die Funktionsnummer                                 *
  88. ;* D1 = Die Parameter (Bytebreite!)                                     *
  89. ;*      Bit 24-31 = Anzahl der Einträge in ptsin                        *
  90. ;*      Bit 16-23 = Anzahl der Einträge in ptsout                       *
  91. ;*      Bit 8-15  = Anzahl der Einträge in intin                        *
  92. ;*      Bit 0-7   = Anzahl der Einträge in intout                       *
  93. ;* Die Gerätekennung wird der Variable "gr_handle" entnommen.           *
  94. ;************************************************************************
  95. vdi:            movem.l D2-A6,-(SP)
  96.                 lea     contrl(PC),A3
  97.                 move.w  D0,(A3)+
  98.                 clr.l   (A3)+
  99.                 clr.l   (A3)+
  100.                 movep.l D1,-7(A3)
  101.                 move.w  gr_handle(PC),2(A3)
  102.                 lea     vdi_pb(PC),A0
  103.                 move.l  A0,D1
  104.                 moveq   #$73,D0
  105.                 trap    #2
  106.                 movem.l (SP)+,D2-A6
  107.                 rts
  108.  
  109. ;************************************************************************
  110. ;* Nun folgt noch der DATA-Bereich                                      *
  111. ;************************************************************************
  112.                 DATA
  113. aes_pb:         DC.L control    ;Der AES-Parameterblock
  114.                 DC.L global
  115.                 DC.L int_in
  116.                 DC.L int_out
  117.                 DC.L addr_in
  118.                 DC.L addr_out
  119.  
  120. vdi_pb:         DC.L contrl     ;Der VDI-Parameterblock
  121.                 DC.L intin
  122.                 DC.L ptsin
  123.                 DC.L intout
  124.                 DC.L ptsout
  125.  
  126. ;************************************************************************
  127. ;* und noch ein wenig BSS-Bereich                                       *
  128. ;************************************************************************
  129.                 BSS
  130. contrl:         DS.W 11         ;Die VDI-Variablen
  131. intin:          DS.W 128
  132. intout:         DS.W 128
  133. ptsin:          DS.W 128
  134. ptsout:         DS.W 128
  135.  
  136. control:        DS.W 5          ;Die AES-Variablen
  137. global:         DS.W 15
  138. int_in:         DS.W 16
  139. int_out:        DS.W 7
  140. addr_in:        DS.L 3
  141. addr_out:       DS.L 1
  142.  
  143. gl_apid:        DS.W 1          ;ID der Applikation
  144. gr_handle:      DS.W 1          ;Die Handle der Bildschirm-Workstation (graf_handle)
  145.  
  146. ;EQU's mit Konstanten sind auch als Vorwärtsreferenzen möglich, da diese Symbole
  147. ;ihren Wert bereits bei der Eingabe erhalten:
  148.  
  149. appl_init:      EQU $0A000100
  150. appl_read:      EQU $0B020101
  151. appl_write:     EQU $0C020101
  152. appl_find:      EQU $0D000101
  153. appl_tplay:     EQU $0E020101
  154. appl_trecord:   EQU $0F010101
  155. appl_bvset:     EQU $10020100   ;ab GEM 2.0
  156. appl_yield:     EQU $11000100   ;ab GEM 2.0
  157. appl_exit:      EQU $13000100
  158.  
  159. evnt_keybd:     EQU $14000100
  160. evnt_button:    EQU $15030500
  161. evnt_mouse:     EQU $16050500
  162. evnt_mesag:     EQU $17000101
  163. evnt_timer:     EQU $18020100
  164. evnt_multi:     EQU $19100701
  165. evnt_dclick:    EQU $1A020100
  166.  
  167. menu_bar:       EQU $1E010101
  168. menu_icheck:    EQU $1F020101
  169. menu_ienable:   EQU $20020101
  170. menu_tnormal:   EQU $21020101
  171. menu_text:      EQU $22010102
  172. menu_register:  EQU $23010101
  173. menu_unregister:EQU $24010100   ;ab GEM 2.0
  174.  
  175. objc_add:       EQU $28020101
  176. objc_delete:    EQU $29010101
  177. objc_draw:      EQU $2A060101
  178. objc_find:      EQU $2B040101
  179. objc_offset:    EQU $2C010301
  180. objc_order:     EQU $2D020101
  181. objc_edit:      EQU $2E040201
  182. objc_change:    EQU $2F080101
  183.  
  184. form_do:        EQU $32010101
  185. form_dial:      EQU $33090100
  186. form_alert:     EQU $34010101
  187. form_error:     EQU $35010100
  188. form_center:    EQU $36000501
  189. form_keybd:     EQU $37030301
  190. form_button:    EQU $38020201
  191.  
  192. graf_rubberbox: EQU $46040300
  193. graf_dragbox:   EQU $47080300
  194. graf_movebox:   EQU $48060100
  195. graf_growbox:   EQU $49080100
  196. graf_shrinkbox: EQU $4A080100
  197. graf_watchbox:  EQU $4B040101
  198. graf_slidebox:  EQU $4C030101
  199. graf_handle:    EQU $4D000500
  200. graf_mouse:     EQU $4E010101
  201. graf_mkstate:   EQU $4F000500
  202.  
  203. srcp_read:      EQU $50000101
  204. srcp_write:     EQU $51000101
  205. scrp_clear:     EQU $52000100   ;ab GEM 2.0
  206.  
  207. fsel_input:     EQU $5A000202
  208. fsel_exinput:   EQU $5B000203   ;ab TOS 1.4
  209.  
  210. wind_create:    EQU $64050100
  211. wind_open:      EQU $65050100
  212. wind_close:     EQU $66010100
  213. wind_delete:    EQU $67010100
  214. wind_get:       EQU $68020500
  215. wind_set:       EQU $69060100
  216. wind_find:      EQU $6A020100
  217. wind_update:    EQU $6B010100
  218. wind_calc:      EQU $6C060500
  219. wind_new:       EQU $6D000000   ;ab TOS 1.4
  220.  
  221. rsrc_load:      EQU $6E000101
  222. rsrc_free:      EQU $6F000100
  223. rsrc_gaddr:     EQU $70020100   ;* (siehe Unterprogramm "aes")
  224. rsrc_saddr:     EQU $71020101
  225. rsrc_obfix:     EQU $72010101
  226.  
  227. shel_read:      EQU $78000102
  228. shel_write:     EQU $79030102
  229. shel_get:       EQU $7A010101
  230. shel_put:       EQU $7B010101
  231. shel_find:      EQU $7C000101
  232. shel_envrn:     EQU $7D000102
  233. shel_rdef:      EQU $7E000102   ;ab GEM 2.0
  234. shel_wdef:      EQU $7F000002   ;ab GEM 2.0
  235.  
  236. xgrf_stepcalc:  EQU $82060600   ;ab GEM 2.0
  237. xgrf_2box:      EQU $83090100   ;ab GEM 2.0
  238.  
  239. ; Die Messages des AES
  240. MN_SELECTED:    EQU 10          ;Menüeintrag angewählt
  241. WM_REDRAW:      EQU 20          ;Teil eines Windows muß neu gezeichnet werden
  242. WM_TOPPED:      EQU 21          ;Window ist nun das aktuelle Fenster
  243. WM_CLOSED:      EQU 22          ;Window soll geschlossen werden
  244. WM_FULLED:      EQU 23          ;Window soll auf max.Größe gebracht werden
  245. WM_ARROWED:     EQU 24          ;Scollbalken angeklickt
  246. WM_HSLID:       EQU 25          ;Der horizontale Slider wurde bewegt
  247. WM_VSLID:       EQU 26          ;Der vertikale Slider wurde bewegt
  248. WM_SIZED:       EQU 27          ;Die Größe des Windows wurde geändert
  249. WM_MOVED:       EQU 28          ;Das Window wurde bewegt
  250. WM_NEWTOP:      EQU 29          ;Das Fenster wurde aktiviert (siehe WM_TOPPED)
  251. WM_UNTOPPED:    EQU 30          ;Der Fenster wird gleich inaktiv (erst ab GEM 2.0!)
  252. AC_OPEN:        EQU 40          ;Ein Acc wurde angeklickt.(30 bzw. 31 ist FALSCH!)
  253. AC_CLOSE:       EQU 41          ;Prg wurde beendet, ACC soll seinen Speicher freigeben.
  254. CT_UPDATE:      EQU 50
  255. CT_MOVE:        EQU 51          ;Funktion unbekannt
  256. CT_NEWTOP:      EQU 52
  257.  
  258. ; WM_ARROWED angeklickt (nun die genauere Definition)
  259. WA_UPPAGE:      EQU 0           ;Balken oberhalb des Sliders
  260. WA_DNPAGE:      EQU 1           ;Balken unterhalb des Sliders
  261. WA_UPLINE:      EQU 2           ;Pfeil nach oben
  262. WA_DNLINE:      EQU 3           ;Pfeil nach unten
  263. WA_LFPAGE:      EQU 4           ;Balken links vom Slider
  264. WA_RTPAGE:      EQU 5           ;Balken rechts vom Slider
  265. WA_LFLINE:      EQU 6           ;Pfeil nach links
  266. WA_RTLINE:      EQU 7           ;und Pfeil nach rechts
  267.  
  268. ; Die Objekttypen des Resource-Baumes
  269. G_BOX:          EQU 20
  270. G_TEXT:         EQU 21
  271. G_BOXTEXT:      EQU 22
  272. G_IMAGE:        EQU 23
  273. G_PROGDEF:      EQU 24
  274. G_IBOX:         EQU 25          ;Bitte in entsprechender Literatur nachschlagen
  275. G_BUTTON:       EQU 26
  276. G_BOXCHAR:      EQU 27
  277. G_STRING:       EQU 28
  278. G_FTEXT:        EQU 29
  279. G_FBOXTEXT:     EQU 30
  280. G_ICON:         EQU 31
  281. G_TITLE:        EQU 32
  282.  
  283. ; Object-Flags bei einem Objekt
  284. NONE:           EQU 0
  285. SELECTABLE:     EQU 1
  286. DEFAULT:        EQU 2
  287. EXIT:           EQU 4
  288. EDITABLE:       EQU 8
  289. RBUTTON:        EQU $10         ;Bitte ebenfalls in der Literatur nachlesen
  290. LASTOB:         EQU $20
  291. TOUCHEXIT:      EQU $40
  292. HIDETREE:       EQU $80
  293. INDIRECT:       EQU $0100
  294.  
  295. ; Objekt-Status bei einem Objekt
  296. NORMAL:         EQU 0
  297. SELECTED:       EQU 1
  298. CROSSED:        EQU 2
  299. CHECKED:        EQU 4           ;s.o.
  300. DISABLED:       EQU 8
  301. OUTLINED:       EQU $10
  302. SHADOWED:       EQU $20
  303.  
  304. ; Die einzelnen Bits bei evnt_multi()
  305. MU_KEYBD:       EQU 1           ;Tastaturereignis
  306. MU_BUTTON:      EQU 2           ;Maustastenereignis
  307. MU_M1:          EQU 4           ;1.Mausereignis
  308. MU_M2:          EQU 8           ;2.Mausereignis
  309. MU_MESAG:       EQU 16          ;Message des AES
  310. MU_TIMER:       EQU 32          ;Timer-Ereignis
  311.  
  312. ; form_dial()
  313. FMD_START:      EQU 0           ;Bildschirmhintergrund reservieren
  314. FMD_GROW:       EQU 1           ;Ausdehnende Box zeichnen
  315. FMD_SHRINK:     EQU 2           ;Schrumpfende Box zeichnen
  316. FMD_FINISH:     EQU 3           ;Bildschirmbereich wieder freigeben
  317.  
  318. ; graf_mouse()
  319. ARROW:          EQU 0
  320. TEXT_CRSR:      EQU 1
  321. HOURGLASS:      EQU 2
  322. BUSYBEE:        EQU 2
  323. POINT_HAND:     EQU 3
  324. FLAT_HAND:      EQU 4
  325. THIN_CROSS:     EQU 5
  326. THICK_CROSS:    EQU 6
  327. OUTL_CROSS:     EQU 7
  328. USER_DEF:       EQU 255
  329. M_OFF:          EQU 256
  330. M_ON:           EQU 257
  331.  
  332. ; Parameter bei wind_create()
  333. WI_NAME:        EQU 1
  334. WI_CLOSE:       EQU 2
  335. WI_FULL:        EQU 4
  336. WI_MOVE:        EQU 8
  337. WI_INFO:        EQU $10
  338. WI_SIZE:        EQU $20
  339. WI_UPARROW:     EQU $40
  340. WI_DNARROW:     EQU $80
  341. WI_VSLIDE:      EQU $0100
  342. WI_LFARROW:     EQU $0200
  343. WI_RARROW:      EQU $0400
  344. WI_HSLIDE:      EQU $0800
  345.  
  346. ; Parameter bei wind_get() & wind_set()
  347. WF_KIND:        EQU 1
  348. WF_NAME:        EQU 2
  349. WF_INFO:        EQU 3
  350. WF_WORKXYWH:    EQU 4
  351. WF_CURRXYWH:    EQU 5
  352. WF_PREVXYWH:    EQU 6
  353. WF_FULLXYWH:    EQU 7
  354. WF_HSLIDE:      EQU 8
  355. WF_VSLIDE:      EQU 9
  356. WF_TOP:         EQU 10
  357. WF_FIRSTXYWH:   EQU 11
  358. WF_NEXTXYWH:    EQU 12
  359. WF_NEWDESK:     EQU 14
  360. WF_HSLSIZE:     EQU 15
  361. WF_VSLSIZE:     EQU 16
  362.  
  363. ; wind_update()
  364. END_UPDATE:     EQU 0
  365. BEG_UPDATE:     EQU 1
  366. END_MCTRL:      EQU 2
  367. BEG_MCTRL:      EQU 3
  368.                 END
  369.